Object oriented (OO) technology is based on the notions of "object" and "class inheritance". An object is a reusable software package that is an instance of a class. The class provides the definition for a set of operations that can be performed on the object and other objects that are instances of the same class. Classes can be related to one another by inheritance, and the properties, behaviours, data and operations of a parent or "base" class (a class without member objects), may be inherited with or without modification in the derived class under the control of a programmer.
Java is one of the newest OO languages. Partially pre-compiled Java code, in the form of bytecode, can be run in the Java virtual machine. Bytecode has been found to be particularly suitable for network transmission. Thus, Java is seen as a primary environment for developing Internet applications, that is, applications referenced on web pages and intended to be down loaded and run at a remote computer.
Sun Microsystems, Inc., the originator of the Java programming language, has developed a Java operating system and development environment (the Java Developer Kit). Emphasizing the code reusability aspects of OO programming, Sun has also developed a software component model, which it refers to as JavaBeans.TM.. According to the Sun JavaBean tutorial "Using the Beans Development Kit 1.0" (February 1997), a "bean" is a Java class which adheres to certain property and event interface conventions. Properties are the public attributes of a class. Conceptually, events are a mechanism for propagating state change notifications between a source object and one or more target objects that have registered with the source object as "listeners" of occurrences of the event. For example, the event scheme of JavaBeans could be used to notify several client beans when the state of certain data is changed in a database. This notification could be used to trigger method invocations by some of the listening clients.
The design of bean interfaces, properties, access methods to properties and events are set out in Sun's JavaBean 1.0 API Specification. The JavaBean software model includes a service called "introspection" that allows beans to be inspected at a low level to determine the class content and, at a high level, to define the properties, methods and events in the class. Introspection operates using the naming conventions required in the specification for programming beans. Thus, classes programmed following the JavaBeans design pattern will provide enough information in a JavaBeans framework to describe what the bean contains and how to use it.
The JavaBeans software component model allows beans to interact with one another in the manner described in greater detail below. Beans may be manipulated in a visual builder tool and composed together into applications.
As discussed in U.S. Pat. No. 5,457,797 titled "Flexible Multi-Platform Partitioning For Computer Applications" of Forte Software Inc., the dual trends in computer development of placing increasingly powerful processors in workstations in personal computers (PCS) coupled with rapidly improving connectivity has permitted the development of distributed applications. Distributed applications refers to the paradigm in which software elements that must cooperate to fulfill the purpose of an application or have completed a transaction spread over multiple parallel processors. One advantage of this is that applications requiring substantial support from other applications can be run over a network of linked workstations or PCS, each with modest memory and processing capacity, rather than requiring a very large computer to run the application and all of its dependencies. The advantages of distributing applications is also discussed in Canadian Patent Application Serial No. 2,165,893, titled "Visual Application Partitioning for Creating Distributed Object Oriented Applications", which is commonly assigned (IBM Docket No. CA9-95-014).
Distribution, then, is the process of creating a remote access mechanism for a program object where some or all of the functions and characteristics of the original object are made available remotely on another machine in a separate program. Both the Forte patent and the earlier IBM application discuss schemes for effecting application partitioning. In the IBM application, a visual partitioning tool permits the user to design the distribution schema and select the middleware properties for each distributed connection. The tool then generates the client and server stubs for all of the distributed connections represented in the distribution schema.
Another way to represent remote objects locally is through the use of "proxies". An early approach to the use of proxies is found M. Shapiro, "Structure and Encapsulation of Distributed System: The Proxy Principle", proceedings of Six International Conference of Distributed Computer Systems, May 1986, Pages 198-204, where proxies are described as being of the nature of "stubs" introduced as interfaces between clients and services.
In object oriented technology, proxies are often used to enable access to remote objects transparently, so that the interface of the proxy accessible to the client is indistinguishable from a similar interface of the actual implementation. This "local-remote transparency" allows the use of a consistent programming style in the client, and permits common code to deal with both local and remote objects. IBM's DSOM and IONA Orbix which conform to the Object Management Group's Common Object Request Broker Architecture, CORBA, are examples of this use of proxies. These environments also offer symmetry in that a mixture of implementation in proxies can exist on both side of a remote connection. The use of proxies enables the support of complex interfaces involving complicated data types, exceptions, and inheritance.
Just as it may be desirable to distribute large non-Java applications over several servers, the same is becoming increasingly important in platform independent programming environments like Java, as users think of these environments more and more as productive working environments.
However, the current JavaBeans component model does not address component distribution. Rather, it is a user's choice to distribute bean functions using the existing object distribution protocols. The object distribution protocol developed by Sun for use in the Java environment is a communications support utility with a remote call paradigm called remote method invocation (RMI). RMI is a service provided as part of the Java Development Kit version 1.1.1. It allows methods in Java objects be invoked from another Java program running in a machine process across a network. It is a similar paradigm to remote procedure calls (RPCs) used in the distributed computing environment (DCE) of the Open Software Foundation. A full description of RPC technology can be found in "Introduction to OSF.TM. DCE", 1992, of Open Software Foundation.
The difficulty with RMI is that the user must define the interfaces for the client and server stubs. It can be quite difficult to seamlessly integrate distribution-specific code, often called middleware, with the non-distributed, application-specific code typically contained in a bean. Application writers are usually familiar with specific application domains, and they specifically do not want to mix the distribution logics and application domains specific logics together.